"""
装饰器为被包装函数增加参数

问题：
    你想在装饰器中给被包装函数增加额外的参数，但是不能影响这个函数现有的调用规则。
解决方案：
    可以使用关键字参数来给被包装函数增加额外参数。
"""

from functools import wraps


def optional_debug(func):
    @wraps(func)
    def wrapper(*args, debug=False, **kwargs):
        if debug:
            print("Calling", func.__name__)
        return func(*args, **kwargs)

    return wrapper


@optional_debug
def say(x, y, z):
    print(x, y, z)


def use_say():
    say("命运 = 大环境", "+ 看问题的方法 + 做事的方法", "+ 运气")
    # 输出结果：
    """
    命运 = 大环境 + 看问题的方法 + 做事的方法 + 运气
    """


if __name__ == '__main__':
    use_say()
